package chapter5.homework.oldSeries.Q2weekdayTranslate;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;

/**
 * @Project ：learn_java
 * @File ：Server.java
 * @IDE ：IntelliJ IDEA
 * @Author ：自由如风间
 * @Date ：2025/3/17 15:45
 * @Description ：模拟客户端输入要查询的星期几的中文，服务器返回对应的英文单词，
 * 一般情况使用byte数组读取是最好的，
 * 但由于无法判断客户端的输入信息什么时候停止（如果硬要用检查是否是三个字符这种粗暴的方法也行。。。），
 * 所以用readLine加上客户端自身进行换行符处理的方法。
 */

public class Server {

    static HashMap<String, String> mp = new HashMap<>() {{
        put("星期一", "Monday");
        put("星期二", "Tuesday");
        put("星期三", "Wednesday");
        put("星期四", "Thursday");
        put("星期五", "Friday");
        put("星期六", "Saturday");
        put("星期日", "Sunday");
    }};

    public static void main(String[] args) throws IOException {
        try (ServerSocket ss = new ServerSocket(10000)) {
            System.out.println("服务器已启动，等待客户端连接...");
            try (Socket socket = ss.accept()) {
                System.out.println("客户端已连接");

                // 构建IO
                InputStream is = socket.getInputStream();
                OutputStream os = socket.getOutputStream();

                InputStreamReader isr = new InputStreamReader(is);
                OutputStreamWriter osr = new OutputStreamWriter(os);

                BufferedReader br = new BufferedReader(isr);
                BufferedWriter bw = new BufferedWriter(osr);

                /*
                读取客户端发送来的消息
                */
                // 使用readLine的话，br只有在接收到换行符的时候才会停止，而客户端发送的字符按理是不用传换行符的，
                // 所以，使用readLine的话，就需要在服务器或者客户端对字符串进行换行符添加处理
                // 注意，读取到的换行符不会写入到读取信息中！
                // String mess = br.readLine();

                // byte[] buffer = new byte[1024];
                // int bytesRead;
                // StringBuilder mess = new StringBuilder();
                // // 循环读取输入流中的数据
                // while ((bytesRead = is.read(buffer)) != -1) {
                //     mess.append(new String(buffer, 0, bytesRead, StandardCharsets.UTF_8));
                // }

                // 读取客户端发送来的消息
                String mess = br.readLine();
                System.out.println("客户端发送的信息：" + mess);
                String feedback = mp.getOrDefault(mess, "请检查你的内容");
                bw.write(feedback);
                bw.flush();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
